package com.cwnu.sw.cys.core.user.domain.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 08/04/2025
 * @description 黑名单类型
 */

@AllArgsConstructor
@Getter
public enum BlackTypeEnum {
    /**
     * 通过UID拉黑
     */
    UID(1, "UID"),

    /**
     * 通过IP拉黑
     */
    IP(2, "IP"),

    ;

    /**
     * 类型，用于标识具体的拉黑状态。
     */
    private final Integer type;

    /**
     * 状态描述，用于描述拉黑状态的含义。
     */
    private final String desc;

    /**
     * 缓存所有枚举实例的映射，键为状态码，值为对应的枚举实例。
     */
    private static final Map<Integer, ChatActiveStatusEnum> CACHE;

    // 静态初始化块，用于初始化缓存
    static {
        CACHE = Arrays.stream(ChatActiveStatusEnum.values()).collect(Collectors.toMap(ChatActiveStatusEnum::getStatus, Function.identity()));
    }

    /**
     * 根据状态码获取对应的枚举实例。
     *
     * @param type 状态码，不能为null
     * @return 对应的枚举实例，如果状态码不存在则返回null
     */
    public static ChatActiveStatusEnum of(Integer type) {
        return CACHE.get(type);
    }

}
